# -*- coding: utf-8 -*-
"""
代码生成错误定义

定义编译时错误，这些错误应该立即中断编译而不是被框架捕获
"""


class CodeGenError(Exception):
    """代码生成错误基类
    
    这个异常类及其子类会被特殊处理：
    - 不会被发射器框架的异常处理捕获
    - 会立即中断编译并报告错误
    - 应该包含清晰的错误信息和位置信息
    """
    
    def __init__(self, message: str, node=None):
        """初始化错误
        
        Args:
            message: 错误信息
            node: 相关的 IR 节点（可选），用于获取源码位置
        """
        self.message = message
        self.node = node
        
        # 构造完整的错误信息
        full_message = message
        if node and hasattr(node, 'source_location') and node.source_location:
            full_message = f"{message}\n  Location: {node.source_location}"
        
        super().__init__(full_message)


class UnknownTypeError(CodeGenError):
    """未知类型错误
    
    当遇到无法识别的类型时抛出此异常
    """
    pass


class UnsupportedSyntaxError(CodeGenError):
    """不支持的语法错误
    
    当遇到不支持的 Python 语法时抛出此异常
    """
    pass

